import edu.umd.cs.piccolo.nodes.PImage;


public class Altimetres extends Cadrans {
	
	// truc inutile pour enlever un warning relou
	private static final long serialVersionUID = 18L;

	private PImage petite_aiguille;
	private PImage moyenne_aiguille;

	private double valeur;
	private int min;
	private int max;
	private double pas;

	private int x_centrePetiteAiguille;
	private int y_centrePetiteAiguille;

	private int x_centreMoyenneAiguille;
	private int y_centreMoyenneAiguille;


	public Altimetres(double x, double y, int mini, int maxi, int larg, int haut, int x_centreGA, int y_centreGA,
			int x_centreMA, int y_centreMA, int x_centrePA, int y_centrePA, double lePas, int positZero, String nom_cadran,
			String nom_Paiguille, String nom_Maiguille, String nom_Gaiguille, String type) {
		
		super(x, y, mini, maxi, larg, haut, x_centreGA, y_centreGA, 0, 0, lePas, positZero, nom_cadran,
				nom_Gaiguille, "", type);

		x_centrePetiteAiguille = x_centrePA;
		y_centrePetiteAiguille = y_centrePA;
		x_centreMoyenneAiguille = x_centreMA;
		y_centreMoyenneAiguille = y_centreMA;
		pas = lePas;
		min = mini;
		max = maxi;
		valeur = 0;
		
		petite_aiguille = new PImage("petite_aiguille_alti.png");
		petite_aiguille.translate(x - x_centrePetiteAiguille -1, y - y_centrePetiteAiguille -1);

		moyenne_aiguille = new PImage("moyenne_aiguille_alti.png");
		moyenne_aiguille.translate(x - x_centreMoyenneAiguille -1, y - y_centreMoyenneAiguille -1);

		super.addChild(petite_aiguille);
		super.addChild(moyenne_aiguille);
	}

	public static Altimetres altimetre3aiguilles(double x, double y) {
		return new Altimetres(x, y, 0, 65000, 215, 219, 7, 59, 8, 43, 9, 84, 36, 0, "altimetre.jpeg", "petite_aiguille_alti.png",
				"moyenne_aiguille_alti.png", "grande_aiguille_alti.png", "Altimetre");
	}

	private double getCentaine(double x) {
		return (x%1000)/100;
	}

	private double getMillier(double x) {
		return (x%10000)/1000;
	}

	public void setValeur(double newValeur) {
		//double newValeurPied = 3.281*newValeurMetre;
		if (newValeur <= max && newValeur >= min) {
			petite_aiguille.rotateAboutPoint(Math.toRadians(((newValeur-valeur)/10000)*pas), x_centrePetiteAiguille, y_centrePetiteAiguille);
			moyenne_aiguille.rotateAboutPoint(Math.toRadians((getMillier(newValeur-valeur))*pas), x_centreMoyenneAiguille, y_centreMoyenneAiguille);
			super.setValeur(getCentaine(newValeur));
			valeur = newValeur;
		}
		else if (newValeur > max) {
			petite_aiguille.rotateAboutPoint(Math.toRadians((max-valeur)*pas/10000), x_centrePetiteAiguille, y_centrePetiteAiguille);
			moyenne_aiguille.rotateAboutPoint(Math.toRadians(getMillier(max-valeur)*pas), x_centreMoyenneAiguille, y_centreMoyenneAiguille);
			super.setValeur(getCentaine(max));
			valeur = max;
		}
		else {
			petite_aiguille.rotateAboutPoint(Math.toRadians((min-valeur)*pas/10000), x_centrePetiteAiguille, y_centrePetiteAiguille);
			moyenne_aiguille.rotateAboutPoint(Math.toRadians(getMillier(min-valeur)*pas), x_centreMoyenneAiguille, y_centreMoyenneAiguille);
			super.setValeur(getCentaine(min));
			valeur = min;
		}
	}

	public void translater(double dx, double dy) {
		double val_temp = this.valeur;
		this.setValeur(0);
		this.translate(dx, dy);
		this.setValeur(val_temp);
	}

	public double getValeur() {
		return valeur;
	}
}
